Projekt Pronal Projekt Pronal

Kazalo:
Sofinasiranje projekta
Starejši - učbenik...
Starejši - zbirka nalog...
Tekmovanja...
Tekmovanja - Parsons...
Tekmovanja - popravi...
Tekmovanja - dopolni
rtk 1988
rtk 1996
rtk 1998
rtk 1999
rtk 2000
rtk 2001
rtk 2002
rtk 2004
rtk 2006
rtk 2007
rtk 2008
rtk 2009
rtk 2013
rtk 2014
rtk 2016
rtk 2017
rtk 2018
rtk 2009

rtk 2009


2009.1.1 - dopolni

Kolikokrat najmanjši

1. podnaloga

Naloga

Napisana je funkcija $kolikokratNajmanjši(dat.txt)$, ki naj bi prebrala zaporedje celih števil in izpisala, kolikokrat se v tem zaporedju pojavi najmanjše število. V funkciji pa žal manjka nekaj kode. Dopolni kodo funkcije(označeno z ###) tako, da bo funkcija delovala. Prav tako dodaj komentarje.

  def kolikokratNajmanjsi(datoteka):
      dat = open(datoteka, 'r', encoding='utf-8').readlines()
      zaporedje = ###
      for vrstica in ###:
          zaporedje.###(int(vrstica.###('\n')))
      minSt = ###
      return sum(1 for x in zaporedje if ###)

Vhodni podatki

tekstovna datoteka $zaporedje.txt$ z zaporedjem števil, vsakim v svoji vrstici. Prva vrstica je prazen niz

  10
  5
  8
  5
  5
  20
  7

Izhodni podatki

integer $x$, ki predstavlja število pojavitev najmanjšega števila v zaporedju.

Uradna rešitev

def kolikokratNajmanjsi(datoteka):
    '''prebere datoteko in izpiše število pojavitev najmenjšega števila v zaporedju'''
    dat = open(datoteka, 'r', encoding='utf-8').readlines()
    zaporedje = []
    for vrstica in dat[1:]:
        zaporedje.append(int(vrstica.strip('\n')))
    minSt = min(zaporedje)
    return sum(1 for x in zaporedje if x == minSt)

2009.1.3 - dopolni

1. podnaloga

Recimo, da bi radi citirali razne strani iz neke knjige; to naredimo tako, da naštejemo številke teh strani v strogo naraščajočem vrstnem redu, na primer 2, 5, 6, 8, 11, 28, 29, 30, 31, 67. Če se v tem seznamu kdaj pojavita dve ali več zaporednih strani, ga lahko zapišemo krajše: obdržimo le prvo in zadnjo številko strani iz take skupine več zaporednih številk, med njiju pa zapišimo vezaj: 2, 5–6, 8, 11, 28–31, 67.

Naloga

Napisana je funkcija funkcijo $citiraj(sezStrani)$, ki naj bi preberala seznam številk strani, vrnila pa nov seznam, kjer so zaporedne strani en element in pisane z vezajem. Vendar pa avtor funkcije ni pravilno citiral izvora patentiranih delčkov kode, zato mu je programerska policija te delčke izbrisala (označeno z ###). Dopolni kodo, da bo delovala.

  def citiraj(sezStrani):
      sezSkrcen = []
      sezStrani.append(0)  # dodamo, da ne bo problemov z indeksi
      i = 0
      while ### < len(sezStrani) - 1:
          if sezStrani[i] == sezStrani[###] - 1:
              Od = sezStrani[i]
              Do = sezStrani[i + 1]

        for j in range(i, len(###) - 1):
            if sezStrani[j + 1] == sezStrani[j + 2] - 1:
                Do = sezStrani[j + 2]
            else:
                ###
        sezSkrcen.append(###)
        i += Do - Od + 1
    else:
        sezSkrcen.append(###))
        i += 1
return sezSkrcen

Vhodni podatki

Seznam integerjev s številkami strani

  [ 2, 5, 6, 8, 11, 28, 29, 30, 31, 67]

V seznamu so številke strani že podane v naraščajočem vrstnem redu, vse pa so cela števila, večja od 0. Predpostaviš lahko, da je v vhodnem seznamu vsaj ena številka in da se nobena številka v njem ne pojavi več kot enkrat.

Izhodni podatki

Seznam nizov s strnjenimi zaporednimi stranmi.

  ['2', '5–6', '8', '11', '28–31', '67'.]

Uradna rešitev

def citiraj(sezStrani):
    '''v seznamu skrči zaporedne številke strani npr. 1,2,3,4 v 1-4
       in vrne nov seznam'''
    sezSkrcen = []
    sezStrani.append(0)  # dodamo, da ne bo problemov z indeksi
    i = 0
    while i < len(sezStrani) - 1:
        # preverimo naslednjo
        if sezStrani[i] == sezStrani[i + 1] - 1:
            Od = sezStrani[i]
            Do = sezStrani[i + 1]
            # preverimo, do kam gre zaporedje
            for j in range(i, len(sezStrani) - 1):
                if sezStrani[j + 1] == sezStrani[j + 2] - 1:
                    Do = sezStrani[j + 2]
                else:
                    break
            sezSkrcen.append(str(Od) + '-' + str(Do))
            i += Do - Od + 1
        else:
            sezSkrcen.append(str(sezStrani[i]))
            i += 1
    return sezSkrcen

2009.1.4 - dopolni


2009.2.1 - dopolni

Mesto objave ob koncu projekta 15.9.2018